package application;
	
import javafx.application.Application;
import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
import javafx.geometry.Pos;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.ComboBox;
import javafx.scene.control.Label;
import javafx.scene.control.Tab;
import javafx.scene.control.TabPane;
import javafx.scene.image.Image;
import javafx.scene.image.ImageView;
import javafx.scene.layout.FlowPane;
import javafx.scene.layout.HBox;
import javafx.scene.layout.VBox;
import javafx.scene.text.Text;
import javafx.stage.Stage;


public class Main extends Application {
	@SuppressWarnings({ "unchecked", "rawtypes" })
	@Override
	public void start(Stage primaryStage) {
		try {
			//初始化UI
			TabPane tp = new TabPane();  //标签页
			Scene scene = new Scene(tp,400,250);
			scene.getStylesheets().add(getClass().getResource("application.css").toExternalForm());
			VBox vxzcx = new VBox();  //星座查询页
			VBox vpdcx = new VBox();  //配对查询页
			VBox rxzcx = new VBox();  //星座查询结果页
			VBox rpdcx = new VBox();  //配对查询结果页
			HBox date = new HBox();  //星座查询选择器
			HBox hmon = new HBox();  //星座查询月份选择器
			HBox hday = new HBox();  //星座查询日期选择器
			HBox hiscons = new HBox();  //配对查询男方选择
			HBox hercons = new HBox();  //配对查询女方选择
			Tab txzcx = new Tab();  //星座查询标签
			Tab tpdcx = new Tab();  //配对查询标签
			
			
			
			//调整样式
			tp.setTabMinWidth(140);
			vxzcx.setSpacing(20);
			vxzcx.setAlignment(Pos.CENTER);
			vpdcx.setSpacing(20);
			vpdcx.setAlignment(Pos.CENTER);
			rxzcx.setSpacing(20);
			rxzcx.setAlignment(Pos.CENTER);
			rpdcx.setSpacing(20);
			rpdcx.setAlignment(Pos.CENTER);
			date.setAlignment(Pos.CENTER);
			date.setSpacing(20);
			hiscons.setAlignment(Pos.CENTER);
			hercons.setAlignment(Pos.CENTER);
			txzcx.closableProperty().set(false);
			tpdcx.closableProperty().set(false);
			
			
			//初始化界面元素
			Label pick = new Label("请选择你的出生日期（阳历）");
			Label lmon = new Label("月");
			Label lday = new Label("日");
			Label his = new Label("他的星座：");
			Label her = new Label("她的星座：");
			Label consres = new Label("");  //星座查询结果标签
			Label pairres = new Label("");  //配对查询结果标签
			ComboBox mon = new ComboBox();  //星座查询月份选择
			ComboBox day = new ComboBox();  //星座查询日期选择
			ComboBox mz = new ComboBox();  //配对查询男方选择
			ComboBox fz = new ComboBox();  //配对查询女方选择
			Button chk = new Button("开始查询");  //星座查询开始按钮
			Button pair = new Button("开始配对");  //配对查询开始按钮
			Button bxzcx  = new Button("返回");  //星座查询结果返回按钮
			Button bpdcx = new Button("返回");  //配对查询结果返回按钮
			txzcx.setText("星座查询");
			tpdcx.setText("配对查询");
			int score[][] = {{88,60,77,44,92,64,84,62,97,48,81,79},{69,87,74,78,57,95,55,84,74,99,66,88},
					{82,69,88,75,76,47,95,77,87,64,93,58},{54,82,64,89,47,80,72,92,70,86,61,99},
					{99,51,85,68,87,71,81,45,92,69,78,70},{74,96,51,86,73,90,49,81,66,93,57,85},
					{65,64,92,58,84,77,89,72,84,57,97,65},{61,78,59,98,65,88,66,87,61,81,45,94},
					{93,58,80,65,97,58,88,69,89,71,75,47},{46,91,70,81,68,98,76,79,78,89,72,82},
					{78,41,97,70,80,74,91,56,82,76,88,75},{71,72,43,92,60,85,61,97,52,79,68,90}};  //配对查询分数表
			ObservableList<String> xingzuo = FXCollections.observableArrayList("双鱼座","水瓶座","摩羯座","射手座","天蝎座","天秤座","处女座","狮子座","巨蟹座","双子座","金牛座","白羊座");  //配对查询星座表
			
			
			//css id设置
			consres.setId("consres");
			bxzcx.setId("bxzcx");
			bpdcx.setId("bpdcx");
			
			
			
			
			//添加界面元素
			hmon.getChildren().addAll(mon,lmon);
			hday.getChildren().addAll(day,lday);
			date.getChildren().addAll(hmon,hday);
			vxzcx.getChildren().addAll(pick,date,chk);
			vpdcx.getChildren().addAll(hiscons,hercons,pair);
			rxzcx.getChildren().addAll(consres,bxzcx);
			rpdcx.getChildren().addAll(pairres,bpdcx);
			hiscons.getChildren().addAll(his,mz);
			hercons.getChildren().addAll(her,fz);
			mon.setItems(FXCollections.observableArrayList("1","2","3","4","5","6","7","8","9","10","11","12"));
			mz.setItems(xingzuo);
			fz.setItems(xingzuo);
			tp.getTabs().add(txzcx);
			tp.getTabs().add(tpdcx);
			txzcx.setContent(vxzcx);
			tpdcx.setContent(vpdcx);
			
			
			
			
			//星座查询操作
			mon.setOnAction(c -> {
				if(mon.getValue() == "1" || mon.getValue() == "3" || mon.getValue() == "5" || mon.getValue() == "7" || mon.getValue() == "8" || mon.getValue() == "10" || mon.getValue() == "12") {
					day.setItems(FXCollections.observableArrayList("1","2","3","4","5","6","7","8","9","10","11","12","13","14","15","16","17","18","19","20","21","22","23","24","25","26","27","28","29","30","31"));
				}
				else if(mon.getValue() == "2") {
					day.setItems(FXCollections.observableArrayList("1","2","3","4","5","6","7","8","9","10","11","12","13","14","15","16","17","18","19","20","21","22","23","24","25","26","27","28","29"));
				}
				else {
					day.setItems(FXCollections.observableArrayList("1","2","3","4","5","6","7","8","9","10","11","12","13","14","15","16","17","18","19","20","21","22","23","24","25","26","27","28","29","30"));
				}
			});
			//星座查询按钮事件
			chk.setOnAction(cl->{
				txzcx.setContent(rxzcx);
				try {
					consres.setText("你的星座是：" + getCons(Integer.valueOf(mon.getValue().toString()),Integer.valueOf(day.getValue().toString())));
				}catch(Exception x) {
					consres.setText("请输入你的出生日期");  //避免没有选出生日期的情况
				}
			});
			//星座查询返回按钮事件
			bxzcx.setOnAction(bk->{
				txzcx.setContent(vxzcx);  //把星座查询标签页画布换为星座查询页面
			});
			//星座特点事件
			consres.setOnMouseClicked(e->{
				Stage intro = new Stage();
				try {
					String cons = getCons(Integer.valueOf(mon.getValue().toString()),Integer.valueOf(day.getValue().toString()));  //获取星座数据
					Text lintro = new Text(getIntro(cons));  //获取星座性格特点
					lintro.setWrappingWidth(350);
					HBox hb = new HBox();
					FlowPane p = new FlowPane(400,300);
					ImageView iv = new ImageView(new Image("/cons/" + cons + ".jpg"));  //获取图片
					hb.getChildren().addAll(iv,p);
					p.setAlignment(Pos.CENTER);
					p.getChildren().add(lintro);
					Scene sc = new Scene(hb);
					intro.setTitle(cons + "性格特点");
					intro.setScene(sc);
					intro.show();
				}catch(Exception n) {
					//避免没有选出生日期的情况
				}
			});
			

			//配对查询按钮事件
			pair.setOnAction(e->{
				tpdcx.setContent(rpdcx);
				try {
					pairres.setText("你们的配对指数是：" + score[xingzuo.indexOf(mz.getValue())][xingzuo.indexOf(fz.getValue())]);  //设置标签文字为配对指数
				}catch(Exception c) {
					pairres.setText("请选择星座");  //避免没有选星座的情况
				}
				
			});
			//配对查询返回按钮事件
			bpdcx.setOnAction(bk->{
				tpdcx.setContent(vpdcx);  //把配对查询标签页画布换位配对查询页
			});
			
			
			
			primaryStage.setScene(scene);
			primaryStage.setTitle("星座查询");
			primaryStage.show();
		} catch(Exception p) {
			p.printStackTrace();
		}
	}
	
	public static void main(String[] args) {
		launch(args);
	}
	
	
	//星座判断函数
	public static String getCons(int mon, int day) {
		if(mon == 1 && day >= 20 || mon == 2 && day <= 18) {
			return "水瓶座";
		}
		else if(mon == 2 && day >= 19 || mon == 3 && day <= 20) {
			return "双鱼座";
		}
		else if(mon == 3 && day >= 21 || mon == 4 && day <= 20) {
			return "白羊座";
		}
		else if(mon == 4 && day >= 21 || mon == 5 && day <= 20) {
			return "金牛座";
		}
		else if(mon == 5 && day >= 21 || mon == 6 && day <= 21) {
			return "双子座";
		}
		else if(mon == 6 && day >= 22 || mon == 7 && day <= 22) {
			return "巨蟹座";
		}
		else if(mon == 7 && day >= 23 || mon == 8 && day <= 22) {
			return "狮子座";
		}
		else if(mon == 8 && day >= 23 || mon == 9 && day <= 22) {
			return "处女座";
		}
		else if(mon == 9 && day >= 23 || mon == 10 && day <= 22) {
			return "天秤座";
		}
		else if(mon == 10 && day >= 23 || mon == 11 && day <= 22) {
			return "天蝎座";
		}
		else if(mon == 11 && day >= 23 || mon == 12 && day <= 21) {
			return "射手座";
		}
		else {
			return "摩羯座";
		}
	}
	
	
	//星座特点判断函数
	public static String getIntro(String cons) {
		if(cons.equals("水瓶座")) {
			return "你爱自由和善变，但是你的梦想无限大。你不但有很多好朋友，而且也搏得年长者得疼爱。你理想高、不喜欢受到限制。聪明而机警的你喜爱挖苦人，加上对爱慕的人忽冷忽热的，捉摸不定，所以一时较难找到理想对象。你优异的推理能力及智慧造成了敏锐的眼光和流畅的辩论能力，是个具有向未知及黑暗挑战的奋战精神的人。你是个温柔的人，即使碰见了讨厌的人，也会对他微笑。因为有点喜新厌旧、没有定性，所以有时候遭人讨厌。不过你普通蛮爆笑、挺可爱的啦！\r\n" + 
					"\r\n" + 
					"水瓶座是有外向性格的男性星座：你非常外放、大方，倾向刚勇而富野心、活跃而且重视精神层面，对任何事情都充满了兴趣。";
		}
		else if(cons.equals("双鱼座")) {
			return "嗯，你善于说服别人，还是个很好的倾听者。你很会照顾朋友，不过希望你别再为小事生气哦！热情、罗曼蒂克的你，总有众多的追求者你具有双重推断的头脑及优异的口才能力。你善于临机应变，富于机智，笔墨和言辞兼备。由于你对各式各样的事都很关心，为人又很热心，所以为十二星座中双重人格最显着的类型。双子座是好奇心很强的智慧星。\r\n" + 
					"\r\n" + 
					"双子座是有外向性格的男性星座：你非常外放、大方，倾向刚勇而富野心、活跃而且重视精神层面，对任何事情都充满了兴趣。";
		}
		else if(cons.equals("白羊座")) {
			return "你大方、明朗，全身充满活力。不管跟什么人，你都能很快的和他打成一片。虽然你十分热情，却缺乏协调性格，容易我行我素，因而发生争执。你做事不拘小节、好动、喜欢群居生活。而且你爱好自由，讨厌受拘束。你是富正义感、积极、果断的理想追求者。还有你爱帮助弱者，有亲切而勇敢的领导能力。你非常有朝气而且精力旺盛，只展示自己好的一面。\r\n" + 
					"\r\n" + 
					"白羊座是有外向性格的男性星座：你非常外放、大方，倾向刚勇而富野心、活跃而且重视精神层面，对任何事情都充满了兴趣。";
		}
		else if(cons.equals("金牛座")) {
			return "你不但好学、知识丰富，还很会发挥你优秀的头脑。温和、顺从是你最明显的个性。你很勤奋，肯脚踏实地的努力。不过你有点消极。虽然不很出色，但你温柔而体贴的性格却十分的吸引人。你信念强、能够对抗虚伪和欺诈，持有高洁的信念。因为你富于童心，所以很乐于追求新鲜的生活。你现实而且朴素，还很守本分，勤苦地开拓前途，是个表现真实自我的类型。\r\n" + 
					"\r\n" + 
					"金牛座是有内向性格的女性星座：你比较倾向女性阴柔的一面。你重感情、做人踏实、对自己也蛮有自信的哦！还有你稳健、平和、温柔，做事不会太莽撞。";
		}
		else if(cons.equals("双子座")) {
			return "嗯，你善于说服别人，还是个很好的倾听者。你很会照顾朋友，不过希望你别再为小事生气哦！热情、罗曼蒂克的你，总有众多的追求者你具有双重推断的头脑及优异的口才能力。你善于临机应变，富于机智，笔墨和言辞兼备。由于你对各式各样的事都很关心，为人又很热心，所以为十二星座中双重人格最显着的类型。双子座是好奇心很强的智慧星。\r\n" + 
					"\r\n" + 
					"双子座是有外向性格的男性星座：你非常外放、大方，倾向刚勇而富野心、活跃而且重视精神层面，对任何事情都充满了兴趣。";
		}
		else if(cons.equals("巨蟹座")) {
			return "巨蟹座的你不但想像力丰富，而且有很强的理解力。你坦白、大方、正直、忠于朋友。还有你十分善于理财、也很会存钱。你有一种母性的防卫能力和不挑剔朋友的顺应性。你很会模仿，并能在模仿中创造出新的东西来。对人过于同情时，你会变成双重性格，因为你感情脆弱，一听到对方的不幸，心就软了下来，同情会改变你对他人的看法。\r\n" + 
					"\r\n" + 
					"巨蟹座是有内向性格的女性星座：你比较倾向女性阴柔的一面。你重感情、做人踏实、对自己也蛮有自信的哦！还有你稳健、平和、温柔，做事不会太莽撞。";
		}
		else if(cons.equals("狮子座")) {
			return "你有着崇高的理想，为人慷慨、有恻隐心、具幽默感，所以会吸引很多人。只要你决定一件事，就不会接受别人的意见。择善固执虽然好，但也该有接受别人意见的雅量。谦虚一点、学习忍耐，不要太骄傲吧！你个性明朗、干脆，具有火焰般的热情。在你类似首领的领导者气质之下，有一颗浮燥，且容易感到寂寞的心。虽然你平时做事很紧张、积极，但一做错了什么，就容易垂头丧气。你对人的态度也是忽好忽坏。\r\n" + 
					"\r\n" + 
					"狮子座是有外向性格的男性星座：你非常外放、大方，倾向刚勇而富野心、活跃而且重视精神层面，对任何事情都充满了兴趣。";
		}
		else if(cons.equals("处女座")) {
			return "你生来就具有艺术家的特质。你对色彩感觉丰富、有音乐欣赏力。你是个认真而害羞、脚踏实地的人。你注重细节又手巧，从小就很会整顿事情，能用手把脑子里的构思一个一个实现出来。你做事认真、很守信用，不过有时也会任性、情绪不稳定。你害羞、不善于表达自己的感情，有着纤细的感受性。你重视秩序，对于善恶、正邪，有锐利的批判力。你是所有星座中最单纯的，不但口不出恶言，而且行为端正，但由于过于清高，有时反而会得罪人。\r\n" + 
					"\r\n" + 
					"处女座是有内向性格的女性星座：你比较倾向女性阴柔的一面。你重感情、做人踏实、对自己也蛮有自信的哦！还有你稳健、平和、温柔，做事不会太莽撞。";
		}
		else if(cons.equals("天秤座")) {
			return "你精力充沛、兴趣广泛、喜欢活动。你从不缺乏交往的物件，是生活在热闹中的人。你很会体贴别人、刻意追求美和正义、不喜欢争执。你公正、有理性、重视友情。虽然偶尔会任性一点，不过通常你冷静而崇尚调和，对任何事都不会狂热。你具有对人生所有经验都能理解的均衡人生观和处世态度。你是双重人格的星座。因为你迷迷糊糊的，自己都不了解自己，所以呈现双重人格，自己也不晓得。\r\n" + 
					"\r\n" + 
					"天秤座是有外向性格的男性星座：你非常外放、大方，倾向刚勇而富野心、活跃而且重视精神层面，对任何事情都充满了兴趣。";
		}
		else if(cons.equals("天蝎座")) {
			return "你是个热情而乐天、不喜欢欺骗、而且很专心的人。你总能积极抓住属于你的幸运。你看起来很安静，其实你头脑很棒，而且对任何事都很热心。你超有耐性的。平常给人的感觉是慎重、沉默寡言，可是事实上是怎么样的闷骚你自己知道吧？！你洞察力很锐利，无聊时就喜欢暗地里观察别人。你不会受任何阻碍所迷惑，很专情，而且你很会选择理想的伴侣。大多人都觉得你善嫉妒、有强烈的独占欲。建议你找一些适合自己的兴趣，抒发自己过于专注的个性及占有欲，才不会给别人太大的压力哦。\r\n" + 
					"\r\n" + 
					"天蝎座是有内向性格的女性星座：你比较倾向女性阴柔的一面。你重感情、做人踏实、对自己也蛮有自信的哦！还有你稳健、平和、温柔，做事不会太莽撞。";
		}
		else if(cons.equals("射手座")) {
			return "你自尊心、适应力强，遇到困难时，会有条有理地处理。诚实、可信赖、头脑好是你的优点。你会带给人快乐！你兴趣广泛。虽然你会插手管无聊的事，不过还好啦，你会反省，找出自己该做的事，然后成为了不起的人物。此外，你具有正义感和爱捉弄人的双重性格，是个憎恨束缚，爱好自由的乐天派。你在日常生活及重视金钱的社会里得不到满足。\r\n" + 
					"\r\n" + 
					"射手座是有外向性格的男性星座：你非常外放、大方，倾向刚勇而富野心、活跃而且重视精神层面，对任何事情都充满了兴趣。";
		}
		else {
			return "你不喜欢出风头，而且很现实。你喜欢清纯的爱，即使是小小的幸福，也会使你感到很大的喜悦。你保守而驯良，崇尚整洁及秩序，而且你具有诚实的责任感及强烈的耐力。你有一种确定目的后便不离放的忍耐精神。你非常朴素、爱干净。你往往因过分坚持自己的意见而吃亏。而且，由于你为人比较沉静，常被认为是性格捉摸不定的人。\r\n" + 
					"\r\n" + 
					"摩羯座是有内向性格的女性星座：你比较倾向女性阴柔的一面。你重感情、做人踏实、对自己也蛮有自信的哦！还有你稳健、平和、温柔，做事不会太莽撞。";
		}
	}
}
